program openmp_hello
    ! 导入OpenMP库所需的模块
    use omp_lib
    implicit none

    integer :: thread_id, num_threads

    print *, "--- 串行执行部分：程序开始 ---"

    !$OMP PARALLEL PRIVATE(thread_id, num_threads)
    ! $OMP PARALLEL 指令后的代码块将由多个线程并行执行。
    ! PRIVATE(X) 表示变量 X 对每个线程是私有的，防止冲突。

        ! 获取当前线程的ID (从 0 开始)
        thread_id = OMP_GET_THREAD_NUM()
        
        ! 获取总的线程数量
        num_threads = OMP_GET_NUM_THREADS()

        print *, "线程 ID: ", thread_id, " / 总线程数: ", num_threads, " - Hello World!"

    !$OMP END PARALLEL

    print *, "--- 串行执行部分：程序结束 ---"

end program openmp_hello